日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 更新jlabel_java - 用Java更新绑定的JLabel文本 - 堆栈内存溢出

發布時間:2023/12/18 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 更新jlabel_java - 用Java更新绑定的JLabel文本 - 堆栈内存溢出 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

當我運行您發布的代碼時,我收到了NullPointerException 。 這是堆棧跟蹤的一部分。 (請注意,我的環境是[64位] Windows 10上的JDK 13.0.1。)

Exception in thread "AWT-EventQueue-0" java.awt.IllegalComponentStateException: contentPane cannot be set to null.

at java.desktop/javax.swing.JRootPane.setContentPane(JRootPane.java:598)

at java.desktop/javax.swing.JFrame.setContentPane(JFrame.java:679)

at generalp/guitests.mouse_input.displayJframe(mouse_input.java:27)

您發布的這一行代碼導致了錯誤。

frame.setContentPane(new mouse_input().mouse_pad);

這是因為mouse_pad從未初始化。

這很容易解決。

private JPanel mouse_pad = new JPanel();

當我運行更改的代碼時,將顯示以下窗口。

這是因為JPanel與所有Swing容器一樣,沒有定義的大小,因為它采用了其包含的[GUI]組件的大小。 實際上,方法pack()將JFrame大小調整為足以容納所有包含的組件的大小,并且唯一包含的組件是大小為零的JPanel 。 因此,對于您發布的代碼,為了擁有合適的尺寸窗口,我們需要顯式設置尺寸。 所以我們需要(例如)而不是pack() )

frame.setSize(400, 300);

現在,當我運行更新的代碼時,我得到

label在哪里? 根據您發布的代碼,它永遠不會添加到frame 。 您要向frame添加兩個組件,即mouse_pad和label 。 如果將mouse_pad設置為“內容窗格”,那么您將無處可去,無法添加label 。 這是布局管理器變得重要的地方。 不幸的是,如果您不熟悉Swing并且依賴GUI構建器,那么如何利用布局管理器來組織您希望顯示的所有組件并不是很明顯。 我認為學習基礎知識很重要。 GUI構建器適用于熟悉Swing并且知道如何利用該構建器節省時間和精力的程序員。 它不是學習Swing或縮短學習曲線的工具。 因此,作為了解基礎知識的人,我知道內容窗格的默認布局管理器是BorderLayout ,因此在您發布的代碼中,我現在將對setContentPane()方法的調用替換為以下內容。

frame.add(mouse_pad, BorderLayout.CENTER);

createUIComponents(); // in order to initialize member 'label'

frame.add(label, BorderLayout.PAGE_START);

最后,您需要向接收鼠標運動事件的組件添加MouseMotionListener 。 這不是JFrame而是JPanel ,在這種情況下為mouse_pad 。 此外,GUI構建器可能不會讓你知道類MouseMotionAdapter它實現MouseMotionListener與空的方法,因此,如果你寫一個類,它擴展MouseMotionAdapter你只需要執行相關的方法,而不是所有的方法,這說明你在注意什么在您發布的代碼中進行以下注釋。

// It doesn't like me deleting this

這是固定代碼。 這不是最好的實現,但它回答了您的問題,基本上是:

我的代碼不起作用。 我應該如何更改才能使其正常工作?

import java.awt.BorderLayout;

import java.awt.Cursor;

import java.awt.event.MouseEvent;

import java.awt.event.MouseMotionAdapter;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.SwingUtilities;

public class MouseInput {

private JPanel mouse_pad = new JPanel();

private JLabel label;

private static int x;

private static int y;

public static void main(String[] args) {

MouseInput instance = new MouseInput();

SwingUtilities.invokeLater(new Runnable(){

public void run(){

instance.createUIComponents();

instance.displayJframe();

}

});

}

public void displayJframe(){

// Create blank content frame

JFrame frame = new JFrame("Mouse Input");

frame.add(mouse_pad, BorderLayout.CENTER);

frame.add(label, BorderLayout.PAGE_START);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(400, 300);

frame.setVisible(true);

// Add mouse motion listener

mouse_pad.addMouseMotionListener(new MouseMotionAdapter() {

@Override

public void mouseMoved(MouseEvent e) {

x = e.getX();

y = e.getY();

label.setText("X = " + x + " , Y = " + y);

}

});

// Set cursor type

frame.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));

// Display frame

frame.setVisible(true);

}

private void createUIComponents() {

label = new JLabel();

label.setText("X = " + x + " , Y = " + y);

}

}

但是,如果您只是開始使用Java進行GUI編程,那么您是否考慮過JavaFX ,它打算作為Swing的更現代的替代品。

總結

以上是生活随笔為你收集整理的java 更新jlabel_java - 用Java更新绑定的JLabel文本 - 堆栈内存溢出的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。