【发布时间】:2021-08-12 15:02:46
【问题描述】:
我正在使用 Java Swing 开发一个 Uni 项目。我想创建一个包含温度和其他变量的统计面板。
我在 MyPanel 类中创建和显示面板时遇到问题。
当我用类MyPanel 中的方法paintComponent 的内容替换主类中的MyPanel p = new MyPanel() 时,它可以工作,但反之则不行。我想在一个单独的类中创建面板并调用它。
public class Main extends JFrame {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JPanel p = createAndShowGUI();
}
});
}
private static JPanel createAndShowGUI() {
System.out.println("Created GUI on EDT? "+
SwingUtilities.isEventDispatchThread());
JFrame f = new JFrame("Swing Demo");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyPanel p = new MyPanel();
f.add(p);
//f.add(new MyPanel());
f.pack();
f.setVisible(true);
return p;
}
}
public class MyPanel extends JPanel {
private JLabel TemperaturLabel ;
private JTextField Temperatur ;
private JLabel LuftfeuchtigkeitLabel;
private JTextField Luftfeuchtigkeit;
private JLabel luftdruckLabel;
private JTextField luftdruck;
private JLabel VorhersageLabel;
private JPanel Panel;
protected void paintComponent(Graphics g) {
TemperaturLabel = new JLabel("Temperatur: ");
Temperatur = new JTextField(2);
LuftfeuchtigkeitLabel = new JLabel("Luftfeuchtigkeit: ");
Luftfeuchtigkeit = new JTextField(3);
luftdruckLabel = new JLabel("Luftdruck: ");
luftdruck = new JTextField(4);
Panel= new JPanel( new GridBagLayout());
VorhersageLabel = new JLabel("Vorhersage:------");
GridBagConstraints c = new GridBagConstraints();
c.insets= new Insets(10,10,10,10);
c.gridx=0;
c.gridy=1;
Panel.add(TemperaturLabel,c);
c.gridx=1;
c.gridy=1;
Panel.add(Temperatur,c);
c.gridx=0;
c.gridy=2;
Panel.add(LuftfeuchtigkeitLabel,c);
c.gridx=1;
c.gridy=2;
Panel.add(Luftfeuchtigkeit,c);
c.gridx=0;
c.gridy=3;
Panel.add(luftdruckLabel,c);
c.gridx=1;
c.gridy=3;
Panel.add(luftdruck,c);
c.gridx=0;
c.gridy=4;
Panel.add(VorhersageLabel,c);
c.gridx=1;
c.gridy=4;
}
public Dimension getPreferredSize() {
return new Dimension(900,700);
}
}
【问题讨论】:
-
看不到与 javafx 的任何关系?无论如何,坚持 java 命名约定,至少在公开显示代码时
-
1) 您扩展了 JPanel 并在 MyPanel 中使用 JPanel。只需使用 JPanel。 2) JPanel 的paintComponent 方法用于使用Graphics 方法进行自定义绘画。您的代码可以使用普通方法,例如 createAndShowPanel。 3) 如果您按列、行顺序创建 Swing 组件,那么直观地调试您的 Swing 代码会容易得多。您在一个地方定义一个 JLabel 并将它添加到另一个地方的 JPanel。它在视觉上令人困惑。,