Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用带有addActionListener的JButton将JPanel添加到另一个JPanel中_Java_Swing_Jpanel_Jbutton_Jlabel - Fatal编程技术网

Java 使用带有addActionListener的JButton将JPanel添加到另一个JPanel中

Java 使用带有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

注释代码就是问题所在。当我使用它们时,面板被成功添加,但我不再需要这些注释代码,但在我删除或注释这些块后,相同的代码不再工作

我评论过的那些代码需要删除。如果没有这些注释代码,程序将运行,但不会添加面板。我在Java项目中使用IntelliJ

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。加:

  • 顶部面板至BorderLayout.PAGE\u开始
  • 将聊天面板切换到BorderLayout.PAGE\u CENTER
  • 底部面板至BorderLayout.PAGE\u结束
  • 在我删除或注释这些块之后

    该代码不是解决方案或问题的方法

    问题在于,组件的大小为(0,0),因此没有要绘制的内容

    在现有代码中,尝试通过使框架变宽来调整其大小。面板将出现。这是因为调整大小将导致调用布局管理器,这将为面板提供一个大小,以便对其进行绘制

    在代码中,您需要使用:

    chatArea.add(p2);
    chatArea.revalidate();
    

    revalidate()将自动调用布局管理器。

    您能解释一下程序应该如何工作以了解问题所在吗?谢谢。“这就解决了我的问题。”瓦伦罗,很高兴这有帮助。不要忘记通过点击复选标记(答案旁边)来“接受”答案,这样人们就知道问题已经解决了。