如何将背景图像设置为JPanel中的JTextArea
作者:互联网
我想在JTextArea上设置自定义背景图像.我曾经看过谷歌,但没有结果,背景可能是一个标志,我也想知道如何设置背景的分辨率.
我在一个包中只有一个班级.我有一个MySQL连接器驱动程序作为Referenced Library,我的工作台是Eclipse,使用Fat-jar插件导出jar
码:
public class panel extends JPanel implements ActionListener {
protected JTextField textField, textField2;
protected static JTextArea textArea;
private final static String newline = "\n";
public panel() {
super(new GridBagLayout());
textField = new JTextField(30);
textField.addActionListener(this);
textField.setBackground(Color.LIGHT_GRAY);
textField2 = new JTextField(30);
textField2.addActionListener(this);
textField2.setEnabled(false);
textArea = new JTextArea(30, 100);
textArea.setEditable(false);
JScrollPane scrollPane = new JScrollPane(textArea);
//Add Components to this panel.
GridBagConstraints c = new GridBagConstraints();
c.gridwidth = GridBagConstraints.REMAINDER;
c.fill = GridBagConstraints.HORIZONTAL;
add(textField, c);
add(textField2, c);
c.fill = GridBagConstraints.BOTH;
c.weightx = 1.0;
c.weighty = 1.0;
add(scrollPane, c);
}
public void actionPerformed(ActionEvent evt) {
String select = textField.getText();
if(textField.getText().equalsIgnoreCase("connect")){
textArea.setForeground(Color.BLACK);
connect();
textField.setText("");
}else if(textField.getText().equalsIgnoreCase("select test")){
textArea.setForeground(Color.BLACK);
viewTest();
textField.setText("");;
}else if(textField.getText().equalsIgnoreCase("clear")){
textArea.setForeground(Color.BLACK);
textField.setText("");
clear();
}else if(textField.getText().equalsIgnoreCase("commands")){
textArea.setForeground(Color.BLACK);
commandsmenu();
textField.setText("");
}else if(textField.getText().equalsIgnoreCase("insertinto test")){
textField2.setEnabled(true);
if(textField2.getText().equals("")){
textArea.append("Please add the VALUES of the table on the second textfield! Syntax: 'Agevaulue', namevalue, adressvalue !" + newline);
}else{
textArea.setForeground(Color.BLACK);
InsertIntoTest();
textField2.setText("");
textField2.setEnabled(false);
}
}
else {
clear();
textArea.setForeground(Color.RED);
textArea.append("Uknown Command -- use: commands -- to see all commands!");
textField.selectAll();
}
//Make sure the new text is visible, even if there
//was a selection in the text area.
textArea.setCaretPosition(textArea.getDocument().getLength());
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event dispatch thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("Java + MySQL Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Add contents to the window.
frame.add(new panel());
//Display the window.
frame.pack();
frame.setVisible(true);
}
public void connect(){
Connection conn = null;
try
{
String url = "jdbc:mysql://localhost/users";
Class.forName("com.mysql.jdbc.Driver");
textArea.append("Database connection established");
conn = DriverManager.getConnection(url, "root", "kristian76");
}
catch (Exception e){
e.printStackTrace();
}
}
public void viewTest()
{
Connection conn = null;
try{
String url = "jdbc:mysql://localhost/users";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, "root", "kristian76");
String query = "SELECT * FROM test";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(query);
while (rs.next()){
int age = rs.getInt("age");
String name = rs.getString("name");
String adress = rs.getString("adress");
textArea.append("AGE: " + age + " |Name: " + name + " |Adress: " + adress + newline);
}
}catch(Exception e){
textArea.setForeground(Color.RED);
textArea.append("Got an Exception!" + newline);
textArea.append(e.getMessage());
}
}public void InsertIntoTest() {
Connection conn = null;
try{
String url = "jdbc:mysql://localhost/users";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, "root", "kristian76");
String query = "INSERT INTO test(age, name, adress)VALUES(" + textField2.getText() + ")";
Statement stmt = conn.createStatement();
stmt.executeUpdate("INSERT INTO test(age, name, adress)VALUES(" + textField2.getText() + ")");
textArea.append("Data Imported!" + newline);
}catch(Exception e){
textArea.setForeground(Color.RED);
textArea.append("Got an Exception" + newline);
textArea.append(e.getMessage());
}
}
public void clear(){
textArea.setText("");
}
public void commandsmenu() {
textArea.append("select <table> - read a <table>" + newline);
textArea.append("clear - clear output" + newline);
textArea.append("commands - see Commands" + newline);
textArea.append("insertinto <table> - insert data into <table>" + newline);
}
public static void main(String[] args) {
//Schedule a job for the event dispatch thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
解决方法:
这很简单,你只需要创建自己的TextArea类,它从JTextArea扩展,然后覆盖paintComponent方法以包含你的背景图像,这里是类:
public class MyTextArea extends JTextArea {
private Image img;
public MyTextArea(int a, int b) {
super(a,b);
try{
img = ImageIO.read(new File("background.jpg"));
} catch(IOException e) {
System.out.println(e.toString());
}
}
@Override
protected void paintComponent(Graphics g) {
g.drawImage(img,0,0,null);
super.paintComponent(g);
}
}
然后在面板中,您仍然可以在代码中使用JTextArea类型:
protected static JTextArea textArea;
但是在初始化时调用最近创建的类的构造函数:
textArea = new MyTextArea(30, 100);
像这样,文本不会让你在后台看到图像,所以我们需要让它透明:
textArea.setBackground(new Color(1,1,1, (float) 0.01));
我没有详细看到你的代码,但一个好的编程实践是CamelCase类的名称,但由于“Panel”是一个Java关键字(Panel是一个AWT组件),那么你可以将它命名为MyPanel或SQLPanel .
标签:jtextarea,java,swing,background-image 来源: https://codeday.me/bug/20190824/1713250.html