滑块在Java Swing GUI中工作不正常
虽然用于生成滑块的语句已放入代码中,但滑块不会出现在GUI中。要使滑块显示在GUI中,我必须修改或添加哪些代码?除滑块外,程序中定义的所有其他Swing组件都将显示滑块在Java Swing GUI中工作不正常,java,swing,null-layout-manager,Java,Swing,Null Layout Manager,虽然用于生成滑块的语句已放入代码中,但滑块不会出现在GUI中。要使滑块显示在GUI中,我必须修改或添加哪些代码?除滑块外,程序中定义的所有其他Swing组件都将显示 package pkTopic5T15; import javax.swing.*; import java.awt.Color; import java.awt.Font; import java.awt.event.*; import javax.swing.event.ChangeEvent; import javax.sw
package pkTopic5T15;
import javax.swing.*;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Topic5T15 {
public int top1 = 60;
public int top2 = 300;
public JPanel pnlLeft;
public JPanel pnlRight;
public int Initialht1 = 100;
public int Initialht2 = 100;
public JSlider sldChangePanels;
public static void main(String[] args) {
Topic5T15 My515 = new Topic5T15();
My515.go();
}
public void go() {
GUI515 My515 = new GUI515();
}
class GUI515 extends JFrame {
private JLabel lblHeading;
private JButton btnPanLeft;
private JButton btnPanRight;
public int ht1;
public int ht2;
protected GUI515() {
this.setSize(800, 900);
this.setLocation(100, 100);
this.setTitle("515");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(null);
Font f1 = new Font("Monospaced", Font.BOLD, 16);
Font f2 = new Font("Dialog", Font.BOLD, 24);
lblHeading = new JLabel("Testing Panels");
lblHeading.setBounds(10, 10, 300, 50);
lblHeading.setFont(f2);
pnlLeft = new JPanel();
pnlLeft.setLayout(null);
pnlLeft.setBounds(10, top1, 300, Initialht1);
pnlLeft.setBackground(Color.RED);
btnPanLeft = new JButton("One");
btnPanLeft.setFont(f1);
btnPanLeft.setBounds(0, 0, 100, 50);
ClickOne c = new ClickOne();
btnPanLeft.addActionListener(c);
pnlLeft.add(btnPanLeft);
this.add(pnlLeft);
pnlRight = new JPanel();
pnlRight.setLayout(null);
pnlRight.setBounds(350, top2, 300, Initialht2);
pnlRight.setBackground(Color.GREEN);
btnPanRight = new JButton("Two");
btnPanRight.setBounds(0, 0, 100, 50);
btnPanRight.setFont(f1);
btnPanRight.addActionListener(c);
pnlRight.add(btnPanRight);
this.add(pnlRight);
sldChangePanels = new JSlider(-100, 100, 1);
sldChangePanels.setBounds(50, 800, 400, 50);
sldChangePanels.setMajorTickSpacing(20);
sldChangePanels.setPaintLabels(true);
SliderListener slis = new SliderListener();
sldChangePanels.addChangeListener(slis);
this.add(sldChangePanels);
this.add(lblHeading);
this.setVisible(true);
}
private class ClickOne implements ActionListener
// This is an inner class; contained within GUI
{
protected ClickOne() {
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnPanLeft) {
btnPanLeft.setText("OUCH1");
top1 = top1 + 20;
pnlLeft.setBounds(10, top1, 300, 100);
}
if (e.getSource() == btnPanRight) {
btnPanRight.setText("OUCH2");
top2 = top2 - 20;
pnlRight.setBounds(350, top2, 300, 100);
}
}
}
private class SliderListener implements ChangeListener
// This is an inner class; contained within GUI
{
protected SliderListener() {
}
public void stateChanged(ChangeEvent e) {
ht1 = Initialht1 + sldChangePanels.getValue();
ht2 = Initialht2 - sldChangePanels.getValue();
pnlLeft.setBounds(10, top1, 300, ht1);
pnlRight.setBounds(350, top2, 300, ht2);
}
}
}
}
根本不使用
null
布局(如果使用),然后为代码中缺少的滑块的每个组件设置边界。这就是滑块不出现的原因
使用正确的布局并再次重新设计应用程序
它值得一读
编辑
- 使用
确保正确初始化 阅读更多SwingUtilities.invokeLater()