Java 使用带有addActionListener的JButton将JPanel添加到另一个JPanel中
注释代码就是问题所在。当我使用它们时,面板被成功添加,但我不再需要这些注释代码,但在我删除或注释这些块后,相同的代码不再工作 我评论过的那些代码需要删除。如果没有这些注释代码,程序将运行,但不会添加面板。我在Java项目中使用IntelliJJava 使用带有addActionListener的JButton将JPanel添加到另一个JPanel中,java,swing,jpanel,jbutton,jlabel,Java,Swing,Jpanel,Jbutton,Jlabel,注释代码就是问题所在。当我使用它们时,面板被成功添加,但我不再需要这些注释代码,但在我删除或注释这些块后,相同的代码不再工作 我评论过的那些代码需要删除。如果没有这些注释代码,程序将运行,但不会添加面板。我在Java项目中使用IntelliJ import javax.swing.*; import javax.swing.border.EmptyBorder; import java.awt.*; import java.awt.event.KeyAdapter; import java.aw
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class Test extends JFrame{
JPanel panel;
JButton send;
JTextField text;
JPanel chatArea;
boolean typing;
Test(){
setSize(365,515);
setLocation(50,100);
setLayout(null);
panel = new JPanel();
panel.setLayout(null);
panel.setBounds(0,0,350,60);
panel.setBackground(new Color(90000000));add(panel);
JLabel name = new JLabel("IRONMAN");
name.setFont(new Font("SAN_SERIF", Font.PLAIN,14));
name.setForeground(Color.white);
name.setBounds(110,35,120,20);panel.add(name);
text = new JTextField();
text.setBounds(15,430,260,40);
text.setFont(new Font("SAN_SERIF",Font.PLAIN,14));
text.setForeground(Color.BLUE);
// Timer timer = new Timer(1, event -> {
// if (!typing){
// name.setText("IRONMAN");
// }
// });
// timer.setInitialDelay(2000);
// text.addKeyListener(new KeyAdapter() {
// @Override
// public void keyPressed(KeyEvent e) {
// name.setText("IRONMAN typing...");
// timer.stop();
// typing = true;
// }
// @Override
// public void keyReleased(KeyEvent e) {
// typing = false;
// if (!timer.isRunning()){
// timer.start();
// }
// }
// });
add(text);
chatArea = new JPanel();
chatArea.setBounds(5,65,340,350);
add(chatArea);
send = new JButton("Send");
send.setBounds(280,430,65,30);
send.setBackground(new Color(200,120,255));
send.setForeground(new Color(7,95,75));
send.addActionListener(e -> {
String message = "STARK: "+text.getText();
JPanel p2 = formatLabel(message);
chatArea.add(p2);
text.setText("");
});
add(send);
}
private JPanel formatLabel(String message) {
JPanel p3 = new JPanel();
JLabel label1 = new JLabel("<html><p style = \"width : 150px\">" + message + "</p></html>");
label1.setBackground(new Color(200,120,255));
label1.setForeground(new Color(7,95,75));
label1.setFont(new Font("SAN_SERIF",Font.PLAIN,18));
label1.setOpaque(true);
label1.setBorder(new EmptyBorder(15,15,15,70));
p3.add(label1);
return p3;
}
public static void main(String[] args) {
Test t = new Test();
t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
t.setVisible(true);
}
}
import javax.swing.*;
导入javax.swing.border.EmptyBorder;
导入java.awt.*;
导入java.awt.event.KeyAdapter;
导入java.awt.event.KeyEvent;
公共类测试扩展了JFrame{
JPanel小组;
JButton发送;
JTextField文本;
杰帕内尔查特地区;
布尔型;
测试(){
设置大小(365515);
设定位置(50100);
setLayout(空);
panel=新的JPanel();
panel.setLayout(空);
面板立根(0,0350,60);
面板.立根背景(新颜色(90000000));添加(面板);
JLabel name=新JLabel(“铁人”);
setFont(新字体(“SAN_SERIF”,Font.PLAIN,14));
名称.设置前景(颜色.白色);
名称.立根(110,35120,20);面板.添加(名称);
text=新的JTextField();
文本.立根(15430260,40);
setFont(新字体(“SAN_SERIF”,Font.PLAIN,14));
设置前景(颜色为蓝色);
//计时器=新计时器(1,事件->{
//如果(!键入){
//name.setText(“铁人”);
// }
// });
//定时器设置初始延迟(2000);
//addKeyListener(新的KeyAdapter(){
//@覆盖
//按下公共无效键(按键事件e){
//name.setText(“铁人打字…”);
//timer.stop();
//输入=真;
// }
//@覆盖
//公共无效密钥已释放(密钥事件e){
//打字=假;
//如果(!timer.isRunning()){
//timer.start();
// }
// }
// });
添加(文本);
chatArea=newjpanel();
查特区(5,65340350);;
添加(聊天室区域);
发送=新的JButton(“发送”);
发送.挫折(280430,65,30);
send.setBackground(新颜色(200120255));
设置前景(新颜色(7,95,75));
send.addActionListener(e->{
String message=“STARK:”+text.getText();
JPanel p2=格式标签(消息);
添加(p2);
text.setText(“”);
});
添加(发送);
}
专用JPanel formatLabel(字符串消息){
JPanel p3=新的JPanel();
JLabel label1=新的JLabel(““+消息+”
”);
标签1.立根(新颜色(200120255));
标签1.设置前景(新颜色(7,95,75));
label1.setFont(新字体(“SAN_SERIF”,Font.PLAIN,18));
label1.Set不透明(真);
标签1.新订单(新的空订单(15,15,15,70));
p3.添加(标签1);
返回p3;
}
公共静态void main(字符串[]args){
测试t=新测试();
t、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
t、 setVisible(真);
}
}
首先是一些一般性意见:
label1.setBorder(new EmptyBorder(15,15,15,70));
不要害怕使用空格。比如说
label1.setBorder(new EmptyBorder(15, 15, 15, 70));
我们的眼睛更容易看到带有空格的文本
setLayout(null);
不要使用空布局。Swing设计用于布局管理器。您可以轻松地使用JFrame的默认BorderLayout。加:
chatArea.add(p2);
chatArea.revalidate();
revalidate()将自动调用布局管理器。您能解释一下程序应该如何工作以了解问题所在吗?谢谢。“这就解决了我的问题。”瓦伦罗,很高兴这有帮助。不要忘记通过点击复选标记(答案旁边)来“接受”答案,这样人们就知道问题已经解决了。