我想用
Java Swing创建以下GUI.
由于我对Java Swing没有足够的经验,我不确定如何精确地重新创建该GUI.
我尝试过使用GridLayout,它看起来像这样:
我已经尝试过其他的LayoutManagers,但由于我的经验不足,我无法获得任何与我想要实现的GUI类似的东西.
我可能不得不使用GridBagLayout,但我已经尝试过,根本无法完成任何事情.
我不确定如何使用GridBagLayout,特别是因为所需的colums数量存在差异(2,2和3).
以下是用于创建第二个GUI的代码:
import java.awt.*; import javax.swing.*; public class GUITest extends JFrame { public GUITest() { super("Testing Title"); Container pane = getContentPane(); pane.setLayout(new GridLayout(3,1)); pane.add(getHeader()); pane.add(getTextArea()); pane.add(getButtonPanel()); } public JComponent getHeader() { JPanel labelPanel = new JPanel(); labelPanel.setLayout(new GridLayout(1,2)); labelPanel.setSize(getPreferredSize()); JLabel labelLocal = new JLabel("Left value: ",JLabel.CENTER); JLabel labelDB = new JLabel("Right value: ",JLabel.CENTER); labelPanel.add(labelLocal); labelPanel.add(labelDB); return labelPanel; } public JComponent getTextArea() { JPanel textPanel = new JPanel(); textPanel.setLayout(new GridLayout(1,2,5,0)); JTextArea testTextArea = new JTextArea(); testTextArea.setEditable(false); JScrollPane sp1 = new JScrollPane(testTextArea); JTextArea testTextArea2 = new JTextArea(); JScrollPane sp2 = new JScrollPane(testTextArea2); testTextArea2.setEditable(false); testTextArea.setText("Hello Hello Hello\nTesting!\ntesterino\ntesteroni"); testTextArea2.setText("Hello Hello Hello\nTesting!\ntest\nABC123\ncdef123\nhijk123"); textPanel.add(sp1); textPanel.add(sp2); return textPanel; } public JComponent getButtonPanel() { JPanel inner = new JPanel(); inner.setLayout(new FlowLayout((FlowLayout.CENTER),100)); inner.add(new JButton("Do something")); inner.add(new JButton("Do something different")); inner.add(new JButton("Do something even more different")); return inner; } public static void main(String[] args) { GUITest e = new GUITest(); e.setSize(700,500); e.setVisible(true); e.setResizable(false); e.setDefaultCloSEOperation(EXIT_ON_CLOSE); e.setLocationRelativeTo(null); } }
我很感谢任何支持!
解决方法
这是你的代码只有一些小的变化:)
import java.awt.*; import javax.swing.*; public class GUITest extends JFrame { public GUITest() { super("Testing Title"); Container pane = getContentPane(); pane.setLayout(new BorderLayout());//Modified Layout to BorderLayout pane.add(getHeader(),BorderLayout.NORTH); //BorderLayout.NORTH pane.add(getTextArea(),BorderLayout.CENTER);//BorderLayout.CENTER pane.add(getButtonPanel(),BorderLayout.SOUTH);//BorderLayout.SOUTH } public JComponent getHeader() { JPanel labelPanel = new JPanel(); labelPanel.setLayout(new GridLayout(1,2)); labelPanel.setSize(getPreferredSize()); JLabel labelLocal = new JLabel("Left value: ",JLabel.CENTER); JLabel labelDB = new JLabel("Right value: ",JLabel.CENTER); labelPanel.add(labelLocal); labelPanel.add(labelDB); return labelPanel; } public JComponent getTextArea() { JPanel textPanel = new JPanel(); textPanel.setLayout(new GridLayout(1,0)); JTextArea testTextArea = new JTextArea(); testTextArea.setEditable(false); JScrollPane sp1 = new JScrollPane(testTextArea); JTextArea testTextArea2 = new JTextArea(); JScrollPane sp2 = new JScrollPane(testTextArea2); testTextArea2.setEditable(false); testTextArea.setText("Hello Hello Hello\nTesting!\ntesterino\ntesteroni"); testTextArea2.setText("Hello Hello Hello\nTesting!\ntest\nABC123\ncdef123\nhijk123"); textPanel.add(sp1); textPanel.add(sp2); return textPanel; } public JComponent getButtonPanel() { JPanel inner = new JPanel(); inner.setLayout(new FlowLayout());//Modified to standard FlowLayout inner.add(new JButton("Do something")); inner.add(new JButton("Do something different")); inner.add(new JButton("Do something even more different")); return inner; } public static void main(String[] args) { GUITest e = new GUITest(); e.pack(); //Modified setSize(700,500) to pack() e.setVisible(true); e.setResizable(false); e.setDefaultCloSEOperation(EXIT_ON_CLOSE); e.setLocationRelativeTo(null); } }