首先说一下,本文主要记录个人在学习Java Swing中遇到的问题,由于之前接触过swing,所以不会讲的很详细。

如果学习和了解Java Swing,建议直接看视频,下面的讲的还是挺不错的

https://www.bilibili.com/video/av6929015/?p=30

 

 

①BorderLayout如何修改各个区域大小?

答案:使用 setPreferredSize(Dimension d)的方法

例如:

java swing 设置tab 位置 java swing setbounds_java swing 设置tab 位置

这个是最普通的用法了,五个部分各放一个,如果不加东西,他们的各部分的大小都永远是这么大

 

那么我们加上一句

bt[1].setPreferredSize( new Dimension(0,100) );//bt1是北部的一个按钮

参数是一个Dimension类型,0和100分别表示宽和高,但是北部的东西你是改不了宽的,这也是为什么我写0的原因,其实你写多少都没有用,第二个参数才是决定北部的高度。

然后就变成这样啦

java swing 设置tab 位置 java swing setbounds_Swing_02

相信你们很聪明,能够举一反三


 

②如何使框体不能改变大小?

一般的界面都是不能让用户改变大小的

加上一句:

this.setResizable(false);

就好了,this是JFrame里面的

 

③布局管理器不定义的时候,默认是BorderLayout

 

④定义一个带背景的panel

package mypackage;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import javax.swing.*;

import java.util.*;
/*
 * 使图片作为背景的类
 */
public class Mypanel extends JPanel
{
	ImageIcon img;
	public Mypanel( ImageIcon img )
	{
		this.img = img;
	}
	public void paintComponent( Graphics g )
	{
		super.paintComponent(g);
		g.drawImage(img.getImage(),0,0,null);
	}
}

调用的时候是下面的用法

ImageIcon bigicon = new ImageIcon("pictures\\主界面飞机.jpg");    //定义ImageIcon
JPanel panel = new Mypanel(bigicon);        //定义一个带背景的panel

 

其实主要是调用了Graphics 里面的drawImage方法

那么,按照视频上的讲解,还可以写成下面这样:

Image image = Toolkit.getDefaultToolkit().getImage
				( Panel.class.getResource("/飞机.jpg") );
		System.out.println("调用print");
		g.drawImage(image, 0, 0,300,150,this);

 

 

⑤ScrollPane与JLabel一起使用

最近在编程的时候想做出一个JLabel的滚动效果出来,类似于下面这样

java swing 设置tab 位置 java swing setbounds_Java_03

但是就是遇到了一些问题,滚动条一直不出来,下面是我本来的代码

 

import java.awt.*;
import java.util.*;

import javax.swing.*;

public class Main
{
	JFrame frame = new JFrame();
	JPanel panel = new JPanel();
	public Main()
	{
		panel.setLayout( new GridLayout(3,1) );
		panel.setSize(200,200);
		JButton button = new JButton();
		String s = "<html><body>"+
				"<p style=\"font-family:verdana;font-size:150%;color:red\">"+
				"hello"+
				"</p>"+
				"</body></html>";
		button.setText(s);
		JLabel lb1 = new JLabel(s);
		panel.add(lb1);
		JLabel lb2 = new JLabel(s);
		panel.add(lb2);
		JLabel lb3 = new JLabel(s);
		panel.add(lb3);
		
		
		JScrollPane pane = new JScrollPane(panel);
		pane.setSize(100,100);
		
		frame.add(pane);
		
		frame.setSize(500, 400);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}
	
	public static void main( String args[] )
	{
		Main m = new Main();
	}

	
}

相信大家也能看懂,就是三个JLabel,加到一个JPanel里面,JPanel用一个JScrollPane,JScrollPane放到JFrame里面

看起来似乎没错,但是运行过后没有预料的结果,但是加了一句 frame.setlayout(null); 就可以了

java swing 设置tab 位置 java swing setbounds_Swing_04

虽然不知道为啥,但还是记下来吧,感觉迷迷糊糊的

⑥HTML中空格,tab和换行

Swing控件中内容可能会用到HTML

那么对于常见的常见的三个

空格是:     &nbsp;

Tab是:       &#9;

换行是:      <br>

用的时候直接加到内容里面就行了

⑦JTable中内容居中需要加上三句话

DefaultTableCellRenderer cr = new DefaultTableCellRenderer();	//表格字体居中
		cr.setHorizontalAlignment(JLabel.CENTER);
		jtable.setDefaultRenderer(Object.class, cr);    //主要是这句话起作用