Java 将图像和文本调整为一行
我有以下代码:Java 将图像和文本调整为一行,java,image,swing,jlabel,swingworker,Java,Image,Swing,Jlabel,Swingworker,我有以下代码: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.beans.*; import java.util.Random; @SuppressWarnings("serial") public class ProgressBarDemo extends JPanel implements Ac
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.beans.*;
import java.util.Random;
@SuppressWarnings("serial")
public class ProgressBarDemo extends JPanel
implements ActionListener,
PropertyChangeListener {
private JProgressBar progressBar;
private JButton generateButton;
private JButton exceptionButton;
private JTextArea taskOutput;
private Task task;
class Task extends SwingWorker<Void, Void> {
/*
* Main task. Executed in background thread.
*/
@Override
public Void doInBackground() {
Random random = new Random();
int progress = 0;
//Initialize progress property.
setProgress(0);
while (progress < 100) {
//Sleep for up to one second.
try {
Thread.sleep(random.nextInt(1000));
} catch (InterruptedException ignore) {}
//Make random progress.
progress += random.nextInt(10);
setProgress(Math.min(progress, 100));
}
return null;
}
/*
* Executed in event dispatching thread
*/
@Override
public void done() {
Toolkit.getDefaultToolkit().beep();
generateButton.setEnabled(true);
setCursor(null); //turn off the wait cursor
taskOutput.append("Done!\n");
JFrame newFrame = new JFrame();
newFrame.setVisible(true);
JLabel label = new JLabel("Task Complete");
newFrame.add(label);
newFrame.setSize(250, 250);
}
}
public ProgressBarDemo() {
super(new BorderLayout());
JPanel labelpanel = new JPanel();
JLabel headerLabel = new JLabel("", JLabel.LEADING);
headerLabel.setText("TEST APPLICATION");
headerLabel.setFont(new Font("Calibri",Font.BOLD,25));
headerLabel.setForeground(Color.blue);
ImageIcon icon = new ImageIcon("logo.jpg","hiii");
JLabel imgl=new JLabel(icon);
labelpanel.add(imgl);
labelpanel.add(headerLabel);
imgl.setBounds(10,10, 150, 70);
//Create the demo's UI.
generateButton = new JButton("button1");
generateButton.setActionCommand("button1");
generateButton.addActionListener(this);
generateButton.setBounds(50, 200, 150, 30);
exceptionButton = new JButton("button2");
exceptionButton.setActionCommand("button2");
exceptionButton.addActionListener(this);
exceptionButton.setBounds(50, 300, 150, 30);
progressBar = new JProgressBar(0, 100);
progressBar.setValue(0);
progressBar.setStringPainted(true);
//progressBar.setBounds(x, y, width, height)
taskOutput = new JTextArea(5, 20);
taskOutput.setMargin(new Insets(5,5,5,5));
taskOutput.setEditable(false);
JPanel panel = new JPanel();
labelpanel.add(headerLabel);
labelpanel.setVisible(true);
add(labelpanel, BorderLayout.PAGE_START);
// panel.add(headerLabel);
panel.add(generateButton);
// panel.add(progressBar);
panel.add(exceptionButton);
labelpanel.setLayout(new BoxLayout(labelpanel,BoxLayout.Y_AXIS));
add(panel, BorderLayout.LINE_START);
add(new JScrollPane(taskOutput), BorderLayout.CENTER);
panel.add(progressBar);
setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
}
/**
* Invoked when the user presses the start button.
*/
public void actionPerformed(ActionEvent evt) {
generateButton.setEnabled(false);
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
//Instances of javax.swing.SwingWorker are not reusuable, so
//we create new instances as needed.
task = new Task();
task.addPropertyChangeListener(this);
task.execute();
}
/**
* Invoked when task's progress property changes.
*/
public void propertyChange(PropertyChangeEvent evt) {
if ("progress" == evt.getPropertyName()) {
int progress = (Integer) evt.getNewValue();
progressBar.setValue(progress);
taskOutput.append(String.format(
"Completed %d%% of task.\n", task.getProgress()));
}
}
/**
* Create the GUI and show it. As with all GUI code, this must run
* on the event-dispatching thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("ProgressBarDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
JComponent newContentPane = new ProgressBarDemo();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入java.beans。*;
导入java.util.Random;
@抑制警告(“串行”)
公共类ProgressBarDemo扩展了JPanel
实现ActionListener,
PropertyChangeListener{
私人JProgressBar progressBar;
私有JButton generateButton;
私有JButton例外按钮;
专用JTextArea任务输出;
私人任务;
类任务扩展SwingWorker{
/*
*主任务。在后台线程中执行。
*/
@凌驾
公共无效doInBackground(){
随机=新随机();
int progress=0;
//初始化进度属性。
setProgress(0);
而(进度<100){
//最多睡一秒钟。
试一试{
Thread.sleep(random.nextInt(1000));
}捕获(中断异常忽略){}
//随机取得进展。
进度+=随机。下一步(10);
setProgress(Math.min(progress,100));
}
返回null;
}
/*
*在事件调度线程中执行
*/
@凌驾
公众假期结束(){
getDefaultToolkit().beep();
generateButton.setEnabled(真);
setCursor(null);//关闭等待光标
taskOutput.append(“完成!\n”);
JFrame newFrame=新JFrame();
newFrame.setVisible(true);
JLabel标签=新JLabel(“任务完成”);
newFrame.add(标签);
newFrame.setSize(250250);
}
}
公共进步组织(){
超级(新边框布局());
JPanel labelpanel=新的JPanel();
JLabel headerLabel=新JLabel(“,JLabel.LEADING”);
headerLabel.setText(“测试应用”);
headerLabel.setFont(新字体(“Calibri”,字体粗体,25));
头部标签。设置前景(颜色。蓝色);
ImageIcon图标=新的ImageIcon(“logo.jpg”、“hiii”);
JLabel imgl=新的JLabel(图标);
labelpanel.add(imgl);
标签面板。添加(标题标签);
imgl.立根(10,10,150,70);
//创建演示的UI。
generateButton=新按钮(“按钮1”);
generateButton.setActionCommand(“button1”);
generateButton.addActionListener(此);
generateButton.setBounds(50、200、150、30);
例外按钮=新按钮(“按钮2”);
exceptionButton.setActionCommand(“按钮2”);
exceptionButton.addActionListener(此);
例外按钮。立根(50、300、150、30);
progressBar=新的JProgressBar(01100);
progressBar.setValue(0);
progressBar.SetStringPaint(真);
//progressBar.setBounds(x、y、宽度、高度)
taskOutput=新的JTextArea(5,20);
taskOutput.setMargin(新插图(5,5,5,5));
taskOutput.setEditable(false);
JPanel面板=新的JPanel();
标签面板。添加(标题标签);
labelpanel.setVisible(真);
添加(labelpanel,BorderLayout.PAGE_START);
//面板。添加(标题标签);
面板。添加(生成按钮);
//面板。添加(进度条);
面板.添加(例外按钮);
labelpanel.setLayout(新的BoxLayout(labelpanel,BoxLayout.Y_轴));
添加(面板、边框布局、线条开始);
添加(新的JScrollPane(taskOutput),BorderLayout.CENTER);
面板。添加(进度条);
setBorder(BorderFactory.createEmptyByOrder(20,20,20,20));
}
/**
*当用户按下开始按钮时调用。
*/
已执行的公共无效操作(操作事件evt){
generateButton.setEnabled(假);
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_Cursor));
//javax.swing.SwingWorker的实例不可重用,因此
//我们根据需要创建新实例。
任务=新任务();
task.addPropertyChangeListener(此);
task.execute();
}
/**
*当任务的进度属性更改时调用。
*/
公共作废属性更改(属性更改事件evt){
if(“progress”==evt.getPropertyName()){
int progress=(整数)evt.getNewValue();
progressBar.setValue(进度);
taskOutput.append(String.format(
“已完成%d%%个任务。\n”,task.getProgress());
}
}
/**
*创建GUI并显示它。与所有GUI代码一样,它必须运行
*在事件调度线程上。
*/
私有静态void createAndShowGUI(){
//创建并设置窗口。
JFrame=新JFrame(“ProgressBarDemo”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//创建并设置内容窗格。
JComponent newContentPane=newProgressBarDemo();
newContentPane.setOkable(true);//内容窗格必须是不透明的
frame.setContentPane(newContentPane);
//显示窗口。
frame.pack();
frame.setVisible(true);
}
公共静态void main(字符串[]args){
//为事件调度线程计划作业:
//创建并显示此应用程序的GUI。
javax.swing.SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
createAndShowGUI();
}
});
}
}
我有一个图像logo.jpg和文本“testapplication”。我想把这两个都排成一行。在我上面的代码中,图像位于顶部,文本位于下一行。我应该如何修改此代码以使两者都在一行上,而不影响框架中的其他元素?jLabel可以同时包含图标和文本,因此您只需将它们添加到同一标签即可:
JLabel headerLabel = new JLabel("TEST APPLICATION", JLabel.LEADING);
ImageIcon icon = new ImageIcon("logo.jpg","hiii");
headerLabel.setIcon(icon);
这样您就不再需要imgl
作为旁注,不要使用绝对布局。你会遇到这样的问题。改用布局管理器