¿Quiero saber cómo usar Java Swing para diseñar la interfaz que quiero? Espero que puedas tomarte el tiempo para ayudar, ¡muchas gracias!
Representación
Idea:
¿JTabbedPane? Proporciona un método setUI para modificar la interfaz y la apariencia de JTabbedPane
Entonces podemos heredar BasicTabbedPaneUI. y reescribir algunos de los métodos de dibujo para modificar la apariencia
Código de referencia import?java.awt.*;
import?java.awt.event.*;
importar?javax.swing.*;
importar?javax.swing.plaf.ComponentUI;
importar?javax.swing.plaf.basic.BasicTabbedPaneUI;
¿clase pública?SwingDemo?extiende?JFrame?implementos?ActionListener?{
JButton?jb;
JPanel?jp3;
¿público SwingDemo? ()?{
JTabbedPane?jtpTotal?=?new?JTabbedPane();//JTabbedPane horizontal?, módulo uno, módulo dos...
JTabbedPane?jtpa? new?JTabbedPane();//Módulo 1, correspondiente a jtpa
jtpa.setTabPlacement(JTabbedPane.LEFT);//Establecer la etiqueta en dirección vertical
JPanel?jp1? ?new?JPanel(new?BorderLayout());//Crear un nuevo JPanel con un diseño de borde
JTextArea?jta?=?new?JTextArea();//Área de texto
jta.append("Si la vida es como el primer encuentro, ¿por qué el viento otoñal está triste y pintado con un abanico?");//El contenido del campo de texto
jta.setFont( new?Font("宋体",Font .BOLD,?25));//El texto del campo de texto
jp1.add(jta);
JPanel?jp2? =?new?JPanel();
JLabel?jl?=?new?JLabel("PI=3.1415926");
jl.setFont(new?Font("script oficial ",Font.BOLD,?20));
jl.setForeground(Color.RED);//Establecer el color del texto de jl
jp2.add(jl);
//Para facilitar la respuesta a eventos, coloque las definiciones de jb y jp3 en la parte superior
jp3?=?new?JPanel();
jb?=?new?JButton("Haga clic en el botón para modificar el color de fondo de esta página");
jb.addActionListener(this);//Agregar respuesta de evento
jp3. add(jb);
jtpa.add(" Opción uno",?jp1);
jtpa.add("Opción dos",?jp2);
jtpa.add("Opción tres",?jp3);
p>JPanel?jpA?=?new?JPanel(new?BorderLayout());
jpA. add(jtpa);
//Agrega todas las opciones de la etiqueta jtpa de
El color de fondo se establece en blanco
for?(int?i?=?0;?i?
jtpa. setBackgroundAt( i,?Color.WHITE);
}
jtpa.setUI(new?TPUI());
jtpTotal.add("Módulo uno ", ?jpA);
// Los jtpb y jtpc siguientes no agregan componentes ni establecen colores, pero la estructura parece más intuitiva
JTabbedPane?jtpb?=?new?JTabbedPane ();
jtpb.setTabPlacement(JTabbedPane.LEFT);
JPanel?jp4?=?new?JPanel();
JPanel?jp5?= ?new?JPanel();
JPanel?jp6?=?new?JPanel();
jtpb.add("Opción cuatro",?jp4);
jtpb.add("Opción cinco",?jp5);
jtpb.add("Opción seis",?jp6);
JPanel?jpB?=?new ?JPanel(new?BorderLayout());
jpB.add(jtpb);
jtpTotal.add("Módulo dos",?jpB);
JTabbedPane?jtpc?=?new?JTabbedPane();
jtpc.setTabPlacement(JTabbedPane.LEFT);
JPanel?jp7?=?new?JPanel(); p> p>
JPanel?jp8?=?new?JPanel();
JPanel?jp9?=?new?JPanel();
jtpc.add(" Opción 7 ",?jp7);
jtpc.add("Opción ocho",?jp8);
jtpc.add("Opción nueve",?jp9); p>
JPanel?jpC?=?new?JPanel(new?BorderLayout());
jpC.add(jtpc);
jtpTotal.add("Módulo tres ", ?jpC);
add(jtpTotal);
setTitle("Ventana principal");//?Title
setSize(620,?480 ); //?Size
setLocationRelativeTo(null);//?Centered
setDefaultCloseOperation(EXIT_ON_CLOSE);//?Salga del programa después de cerrar la ventana
> setVisible(true );//?La ventana es visible
}
public?static?void?main(String[]?args)?{
new?SwingDemo() ;
}
@Override
public?void?actionPerformed(ActionEvent?e)?{//Haga clic para modificar el color de jp3
if(e.getSource()==jb){//Si se hace clic en el botón jb
jp3.setBackground
(new?Color(getInt(),getInt(),getInt()));// Luego modifica el color de fondo de jp3
}
}
public?int?getInt(){//Generar aleatoriamente números entre 0 y 255, utilizados para generar colores aleatorios r, g, b
return?(int)?(Math.random()* 256 );
}
}
//Tenga en cuenta que esta clase se usa para modificar la apariencia de JTabbedPane
class?TPUI? se extiende? BasicTabbedPaneUI?{
public?static?ComponentUI?createUI(JComponent?c)?{
return?new?TPUI();
}
@Override
protected?void?paintTabBorder(Gráficos?g,?int?tabPlacement,?int?tabIndex,?int?x,?int?y,?int?w, ?int ?h,
boolean?isSelected)?{
if?(isSelected)?{//Si la etiqueta está seleccionada,?entonces dibuja un rectángulo
g .setColor(new?Color(116,?168,?231));
g.fillRect(x?+?w?-?10,?y,?x+w,? h);
}else{//Cuando no hay ningún borde seleccionado, no es necesario dibujarlo.
g.setColor(new?Color(116,?168 ,?231));
g.drawRect(x?+?w?-?8,?y,?x+w,?h);
}
} p>
@Override
protected?void?paintTabBackground(Gráficos?g,?int?tabPlacement,?int?tabIndex,?int?x,?int?y ,?int?w,? int?h,
booleano?isSelected)?{
g.setColor(Color.RED);
super.paintTabBackground (g,?tabPlacement,? tabIndex,?x,?y,?w,?h,?false);
//El último parámetro?true dibuja el color de fondo false no dibuja<. /p>
///? Si el parámetro es isSelected?, entonces el color de fondo se dibujará si está seleccionado, y si no está seleccionado, no se dibujará.
}
}